<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script>
    // 异步
    /**
     * 所谓异步，简单来说就是一个任务不是连续完成的，可以理解成该任务被人为分成俩段
     * 先执行第一段代码，然后转而执行其他任务，等做好了准备再回头执行第二段。
     *
     * 相应的，连续执行就叫同步。 由于是连续执行，不能插入其他任务，所以操作系统从硬盘读取文件这段时间，程序只能干等着
    */
   // 协程
   /**
    * 传统的编程语言，早有异步编程的解决方案，(其实是多任务的解决方案)
    * 其中有一种叫做“协程”(coroutine), 意思是多个线程相互协作，完成异步任务。
    *
    * 协程有点像函数，又有点像线程。它的运行流程大致如下：
    *
    * --------第一步，协程A开始执行
    * --------第二步，协程A执行到一半，进入暂停，执行权转移到协程B
    * --------第三步，(一段时间后)协程B交还执行权。
    * --------第四步，协程A恢复执行。
    *
    * 上面流程的协程A就是异步任务，因为它分成俩段(或多段)执行
   */
  // function* asyncJob() {
  //   //...其他代码
  //   var f = yield readFile(fileA)
  //   //...其他代码
  // }
  /**
   * 上面的函数asyncJob是一个协程，它的奥妙就在其中的yeild命令
   *
   * 它表示执行到此处，执行权将交给其他协程，
   * 也就是说，yeild命令是异步俩个阶段的分界线。
   * 协程遇到yield命令就暂停，等到执行权返回，再从暂停的地方继续往后执行。
   * 它的最大优点，就是代码的写法非常像同步操作，如果去除yield命令，简直一模一样。
  */
  </script>
</body>
</html>